/*
 * 数据表格页面通用脚本
 */

// 移动模式下重设弹窗都设为全屏
if (common.isModile()) { POPUP_AREA = ['100%', '100%'];}


// ------------------------------- 操作方法定义开始 --------------------------------------------------------------//
/*
 * 数据表格操作方法
 */
window.dataTable = {
    /*
     * 重新渲染整个数据表格，并带上查询面板中的查询参数
     */
	search: (obj) => {
        // 从查询表单中获取参数
        OPTIONS.where = form.val("query-form");
        // OPTIONS中的默认排序参数带入到where参数中
        if (OPTIONS.initSort) {
            OPTIONS.where.sortField = OPTIONS.initSort.field;
            OPTIONS.where.sortType = OPTIONS.initSort.type;
        }
        // 渲染表格
        datatable.render(OPTIONS);
    }
    /*
     * 重新加载数据表格数据
     */
    , refresh: (obj) => {
        // 重新加载数据表格
    	datatable.reloadData("data-table", null, true);
    }
    /*
     * 新建记录
     */
    , add: (obj) => {
        var url = MODULE_PATH + "add";
        window.dataTable.addOrEdit("<i class='layui-icon layui-icon-add-1'></i>&nbsp;&nbsp;新增", url, "post", "add");
    }
    /*
     * 新建子项记录
     */
    , addChild: (obj) => {
    	var url = MODULE_PATH + "add?parentId=" + obj.data['id'];
        window.dataTable.addOrEdit("<i class='layui-icon layui-icon-add-1'></i>&nbsp;&nbsp;新增", url, "post", "add");
    }
    /*
     * 编辑记录
     */
    , edit: (obj) => {
    	var url = MODULE_PATH + "edit?id=" + obj.data['id'];
    	window.dataTable.addOrEdit("<i class='layui-icon layui-icon-edit'></i>&nbsp;&nbsp;编辑", url, "put", "edit");
    }
    /*
     * 新增或编辑记录总方法
     */
    , addOrEdit: (title, url, method, action) => {
        layer.open({
            type : 2,
            title : title,
            content : url,
            maxmin : false,
            area : POPUP_AREA,
            closeBtn : 1,
            shadeClose : false,
            anim : 1,
            moveOut : false,
            resize : false,
            btn : [ '保存', '取消' ],
            yes : (index, layero) => {
                var iframeWindow = window['layui-layer-iframe' + index],
                submitID = 'data-save', // 此ID必须和弹出iframe窗口中提交按钮的ID和Filter值一致
                submit = layero.find('iframe').contents().find("#" + submitID);

                // 监听提交
                iframeWindow.layui.form.on('submit('+ submitID + ')', function(data) {
                    $.ajax({ // 用Ajax替换弹窗中的提交
                        url : MODULE_PATH + action,
                        type : method,
                        data : data.field, // 获取提交的数据
                        beforeSend : function(){layer.load();}, // 防止重复操作
                        complete : function(){layer.closeAll('loading');}, //解除防重复操作
                        success : function(result){
                            if(result.code == 200){
                                // 提交 Ajax 成功后，静态更新表格中的数据
                                window.dataTable.refresh(); // 数据表格刷新
                                layer.close(index); //关闭弹层
                            } else {
                                if(result.description){
                                    // Ajax调用成功，但后台返回失败信息
                                    layer.alert(result.description, {icon: 5});
                                } else {
                                    layer.alert("操作失败！", {icon: 2});
                                }
                            }
                        },
                        error : function (e) { // Ajax调用失败
                            layer.alert("操作失败：" + e.responseText, {icon: 2});
                        }
                    });
                    return false; // 一定要返回False来阻止弹出窗口中提交按钮的再次提交
                });

                submit.trigger('click'); // 这里触发弹出窗口的提交按钮
            }
        });
    }
    /*
     * 多记录移除
     */
    , batchRemove: (obj) => {
        var checkedIds = common.checkField(obj, 'id');
        
        if (checkedIds === "") {
            layer.msg("未选中任何记录", {
                icon: 3,
                time: 1000
            });
            return false;
        }
    	window.dataTable.removeByIds(checkedIds);
    }
    /*
     * 单记录移除
     */
    , remove: (obj) => {
    	window.dataTable.removeByIds(obj.data['id']);
    }
    /*
     * 通过ID表移除记录
     */
    , removeByIds: (ids) =>{
        layer.confirm('确定要删除选择的记录？', {
            icon: 3,
            title: '提示'
        }, (index) => {
            layer.close(index);
            $.ajax({
                url: MODULE_PATH + "delete",
                dataType: 'json',
                type: 'delete',
                data: {"ids": ids},
                beforeSend: () => {layer.load();}, // 防止重复操作
                complete: () => {layer.closeAll('loading');}, //解除防重复操作
                success: (result) => {
                    if (result.code == 200) {
                        // 提交 Ajax 成功后，静态更新表格中的数据
                        window.dataTable.refresh(); // 数据表格刷新
                    } else {
                        if(result.description){
                            // Ajax调用成功，但后台返回失败信息
                            layer.alert(result.description, {icon: 5});
                        } else {
                            layer.alert("操作失败！", {icon: 2});
                        }
                    }
                }
            })
        });
    }
    /*
     * 查看记录详情
     */
    , detail: (obj) => {
        layer.open({
            type : 2,
            title : "<i class='layui-icon layui-icon-survey'></i>&nbsp;&nbsp;查看",
            content : MODULE_PATH + "detail?id=" + obj.data['id'],
            maxmin : false,
            area : POPUP_AREA,
            closeBtn : 1,
            shadeClose : false,
            anim : 1,
            moveOut : false,
            resize : false,
            btn : [ '关闭' ],
            yes : (index, layero) => {
                layer.close(index); // 关闭弹层
            }
        });
    }
    /*
     * 导出记录
     */
    , export: () => {
        
    }
    /*
     * 导出成Excel
     */
    , exportExcel: () => {
        
    }
    /*
     * 清空所有记录
     */
    , clearAll: () => {
        layer.confirm("确认清空所有记录吗？", {
            icon: 3,
            title: '确认'
        }, function(index) {
            layer.close(index);
            $.ajax({
                url: MODULE_PATH + "clear",
                method: "post",
                data: form.val("query-form"),
                beforeSend : function(){layer.load();}, // 防止重复操作
                complete : function(){layer.closeAll('loading');}, //解除防重复操作
                success: function(result) {
                    if (result.code == 200) {
                        layer.alert("操作成功！", {icon: 1});
                        window.dataTable.search();
                    } else {
                        if(result.description){
                            // Ajax调用成功，但后台返回失败信息
                            layer.alert(result.description, {icon: 5});
                        } else {
                            layer.alert("操作失败！", {icon: 2});
                        }
                    }
                }
            });
        });
    }
};
// ------------------------------- 操作方法定义结束 --------------------------------------------------------------//


// ------------------------------- 表格事件监听开始 --------------------------------------------------------------//
// 监听行双击事件
datatable.on('rowDouble(data-table)', (obj) => {
    window.dataTable.detail(obj);
});

// 表格上端工具条按钮
datatable.on('toolbar(data-table)', (obj) => {
    if (obj.event === 'add') {
        window.dataTable.add(obj);
    } else if (obj.event === 'batchRemove') {
        window.dataTable.batchRemove(obj);
    } else if (obj.event === 'clearAll') {
        window.dataTable.clearAll(obj);
    } else if (obj.event === 'expandAll') {
        window.treeTable.expandAll(obj);
    } else if (obj.event === 'foldAll') {
        window.treeTable.foldAll(obj);
    } else if (obj.event === 'toggle') {
        window.queryForm.toggle(obj);
    } else {
        window.dataTable.cumstomEvent(obj.event, obj);
    }
});

// 监听表格中每条记录后面的操作
datatable.on('tool(data-table)', (obj) => {
    if (obj.event === 'addChild') {
        window.dataTable.addChild(obj);
    } else if (obj.event === 'remove') { //
        window.dataTable.remove(obj);
    } else if (obj.event === 'edit') {
        window.dataTable.edit(obj)
    } else {
        window.dataTable.cumstomEvent(obj.event, obj);
    }
});

// 监听表格标题头部排序切换小箭头
datatable.on('sort(data-table)', (obj) => {
    // 更新OPTIONS的排序字段
    OPTIONS.initSort = {"field": obj.field, "type": obj.type};
    // 查询数据表格
    window.dataTable.search(obj);
});
// ------------------------------- 表格事件监听结束 --------------------------------------------------------------//


#include("window_queryForm_script.js")
